/**
 * 存储数据
 * key: 缓存的键名，必填
 * value: 缓存的值，选填
 * 
 * when: 缓存的过期时间，选填:
 *    【1】传入具体秒数时（单位必须为秒），到期后清除；
 *    【2】传入单词 forever时，永不清除；
 *    【3】传其他值或不传值时，App关闭时清除；
 */
function set(key, value, when) {
	if (!key) { // 如果key为空，直接返回
		console.log("key不能空");
		return;
	}

	const valueObj = {
		value: value,
		storageExpire: '',
	}
	if (when == 'forever') { //永久存储
		valueObj.storageExpire = 'forever';
	} else if (!isNaN(Number.parseFloat(when))) { //规定时间后过期
		const timestamp = Date.parse(new Date()) / 1000; // 获取当前时间戳，单位为秒
		valueObj.storageExpire = timestamp + Number.parseFloat(when)
	} else { //临时存储-App关闭后过期
		valueObj.storageExpire = 'temporary'
	}

	uni.setStorageSync(key, valueObj);
}

/**
 * 获取数据
 * key: 缓存的键名，必填
 */
function get(key) {
	if (!key) { // 如果key为空，直接返回
		console.log("key不能空");
		return;
	}

	const res = uni.getStorageSync(key) || '';
	const when = res?.storageExpire || '';
	let final = ''
	if (when == 'forever') { //永久存储
		final = res?.value || ''
	} else if (!isNaN(Number.parseFloat(when))) { //规定时间后过期
		const timestamp = Date.parse(new Date()) / 1000; // 获取当前时间戳，单位为秒
		if (timestamp >= Number.parseFloat(when)) { //已过期
			remove(key);
			final = ''
		} else { //未过期
			final = res?.value || ''
		}
	} else if (when == 'temporary') { //临时存储
		final = res?.value || ''
	} else { //其他情况（例如获取通过uni.seStorageSync存储的值）
		final = res || ''
	}

	return final
}

/**
 * 移除数据
 * key: 缓存的键名，必填
 */
function remove(key) {
	if (!key) { // 如果key为空，直接返回
		console.log("key不能空");
		return;
	}

	uni.removeStorageSync(key);
}

/**
 * 移除所有临时数据（此方法需要在App.vue里调用）
 */
function removeAllTempData() {
	const list = uni.getStorageInfoSync().keys || []
	for (let item of list) {
		let res = uni.getStorageSync(item) || ''
		if (res?.storageExpire == 'temporary') { //判断是否为临时数据
			remove(item)
		}
	}
}


export default {
	set,
	get,
	remove,
	removeAllTempData,
}